package cn.edu.zut.project1.controller;

import cn.edu.zut.project1.dto.RegisterDTO;
import cn.edu.zut.project1.pojo.Result;
import cn.edu.zut.project1.pojo.User;
import cn.edu.zut.project1.dto.LoginDTO;
import cn.edu.zut.project1.service.UserService;
import jakarta.servlet.http.HttpSession;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

/**
 * 用户控制器
 * 处理用户相关的HTTP请求
 */
@Slf4j
@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;

    /**
     * 用户登录接口
     * @param loginDTO 登录参数（通过@Validated进行参数校验）
     * @return 登录结果（成功返回用户信息，失败返回错误消息）
     */
    @PostMapping("/login") // 登录使用POST请求
    public Result login(@Validated @RequestBody LoginDTO loginDTO, HttpSession session) {
        log.info("用户登录：账号={}", loginDTO.getUserAccount());
        try {
            User user = userService.login(loginDTO);

            user.setUserPassword(null);

            session.setAttribute("loginUser",user);
            return Result.success("登录成功", user);
        } catch (RuntimeException e) {
            // 捕获业务层抛出的异常，返回错误消息
            return Result.error(e.getMessage());
        }
    }
    /**
     * 用户注册接口
     * @param registerDTO 注册参数
     * @return 注册结果（成功返回用户信息，失败返回错误消息）
     */
    @PostMapping("/register")
    public Result register(@Validated @RequestBody RegisterDTO registerDTO) {
        log.info("用户注册：账号={}", registerDTO.getUserAccount());
        try {
            userService.register(registerDTO);
            return Result.success("下单成功", "注册成功");
        } catch (RuntimeException e) {
            return Result.error(e.getMessage());
        }
    }
}